import gradio as gr
from mmrole_lite import MMRoleLite
from config_lite import ConfigLite

def create_demo():
    print("正在初始化MMRole Lite...")
    agent = MMRoleLite(ConfigLite)
    
    def process(image, character_choice, user_input):
        if image is None:
            return "请上传图片", "等待评估..."
        if not user_input:
            return "请输入问题", "等待评估..."
            
        print(f"处理图片并生成{character_choice}的回应...")
        image_desc = agent.analyze_image(image)
        print(f"图片描述: {image_desc}")
        
        response = agent.generate_response(character_choice, image_desc, user_input)
        print(f"生成回应: {response}")
        
        scores = agent.evaluate_response(response, character_choice, image_desc)
        scores_text = "\n".join([f"{k}: {v:.2f}" for k, v in scores.items()])
        
        return response, f"评估结果:\n{scores_text}"
    
    interface = gr.Interface(
        fn=process,
        inputs=[
            gr.Image(type="filepath", label="上传图片"),
            gr.Dropdown(
                choices=list(ConfigLite.CHARACTERS.keys()),
                label="选择角色",
                value="harry_potter"
            ),
            gr.Textbox(label="您的问题", placeholder="请输入您想问的问题...")
        ],
        outputs=[
            gr.Textbox(label="角色回应"),
            gr.Textbox(label="评估结果")
        ],
        title="MMRole Lite Demo",
        description="""
        多模态角色扮演代理简化版演示
        
        功能特点：
        1. 图像理解：分析上传图片的内容
        2. 角色扮演：模拟特定角色的对话风格
        3. 评估系统：评估回应的质量
        
        使用说明：
        1. 上传一张图片
        2. 选择想要对话的角色
        3. 输入您的问题
        """
    )
    return interface

if __name__ == "__main__":
    print("启动MMRole Lite Demo...")
    demo = create_demo()
    demo.launch(share=True)  # share=True 允许生成公共URL 